/**
 * 位置追踪功能使用示例
 * 
 * 此文件展示如何在页面中使用位置追踪功能
 */

const locationUtil = require('./location')

// ============================================
// 示例 1: 请求位置权限（新版本）
// ============================================
async function exampleRequestPermission() {
  // 需求 4.1: 请求位置访问权限并说明使用目的
  const result = await locationUtil.requestLocationPermission(true)
  
  if (result.granted) {
    // 需求 4.2: 位置权限已授予，启用位置追踪功能
    console.log('位置权限已授予，原因:', result.reason)
    // 可以继续使用位置功能
  } else {
    // 需求 4.4: 位置权限被拒绝，禁用需要位置的功能
    console.log('位置权限被拒绝，原因:', result.reason)
    wx.showToast({
      title: '无法使用位置功能',
      icon: 'none'
    })
  }
}

// ============================================
// 示例 1.1: 检查位置权限状态
// ============================================
async function exampleCheckPermission() {
  const result = await locationUtil.checkLocationPermission()
  
  console.log('权限状态:', result.status)
  // status: 'granted' | 'denied' | 'not_requested'
  
  if (result.hasPermission) {
    // 需求 4.2: 权限已授予，可以使用位置功能
    console.log('可以使用位置功能')
  } else {
    // 需求 4.4: 权限未授予，功能受限
    console.log('位置功能受限')
  }
}

// ============================================
// 示例 2: 获取当前位置（一次性）
// ============================================
async function exampleGetCurrentLocation() {
  try {
    const location = await locationUtil.getCurrentLocation()
    console.log('当前位置:', location)
    // location = {
    //   latitude: 39.9042,
    //   longitude: 116.4074,
    //   accuracy: 65,
    //   altitude: 50
    // }
  } catch (err) {
    console.error('获取位置失败:', err)
    wx.showToast({
      title: '获取位置失败',
      icon: 'none'
    })
  }
}

// ============================================
// 示例 3: 开始位置追踪（用于导航页面）
// ============================================
async function exampleStartTracking() {
  const success = await locationUtil.startLocationTracking(
    // 位置更新回调
    (location) => {
      console.log('位置更新:', location)
      // 更新页面数据
      this.setData({
        currentLocation: location
      })
      // 发送位置到后端
      // api.updateSessionLocation(sessionId, location)
    },
    // 错误回调
    (error) => {
      console.error('位置追踪错误:', error)
      wx.showToast({
        title: '位置更新失败',
        icon: 'none'
      })
    },
    // 可选配置
    {
      interval: 5000,    // 每5秒检查一次
      minDistance: 10    // 移动超过10米才更新
    }
  )
  
  if (success) {
    console.log('位置追踪已启动')
  } else {
    console.log('位置追踪启动失败')
  }
}

// ============================================
// 示例 4: 停止位置追踪（会话结束时）
// ============================================
function exampleStopTracking() {
  locationUtil.stopLocationTracking()
  console.log('位置追踪已停止')
}

// ============================================
// 示例 5: 检查追踪状态
// ============================================
function exampleCheckTrackingStatus() {
  const isTracking = locationUtil.isLocationTracking()
  console.log('是否正在追踪:', isTracking)
  
  const lastLocation = locationUtil.getLastKnownLocation()
  console.log('最后已知位置:', lastLocation)
}

// ============================================
// 示例 6: 计算两点距离
// ============================================
function exampleCalculateDistance() {
  const distance = locationUtil.calculateDistance(
    39.9042, 116.4074,  // 北京天安门
    31.2304, 121.4737   // 上海外滩
  )
  console.log('距离:', distance, '米')
  console.log('距离:', (distance / 1000).toFixed(2), '公里')
}

// ============================================
// 示例 7: 使用权限管理器
// ============================================
const permissionManager = require('./permission-manager')

async function exampleUsePermissionManager() {
  // 检查功能是否可用
  const availability = await permissionManager.checkFeatureAvailability(
    permissionManager.LOCATION_REQUIRED_FEATURES.ROUTE_PLANNING
  )
  
  if (availability.available) {
    console.log('路径规划功能可用')
  } else {
    console.log('路径规划功能不可用:', availability.reason)
  }
  
  // 执行需要权限的操作
  const success = await permissionManager.executeWithPermission(
    permissionManager.LOCATION_REQUIRED_FEATURES.NAVIGATION,
    async () => {
      // 这里是需要位置权限的操作
      const location = await locationUtil.getCurrentLocation()
      console.log('当前位置:', location)
    },
    {
      showExplanation: true,
      autoRequest: true,
      returnUrl: '/pages/navigation/navigation'
    }
  )
  
  console.log('操作执行结果:', success)
}

// ============================================
// 完整的页面使用示例（新版本）
// ============================================
Page({
  data: {
    currentLocation: null,
    isTracking: false,
    hasLocationPermission: false
  },

  onLoad() {
    // 页面加载时检查权限
    this.checkPermission()
  },

  onShow() {
    // 每次显示时重新检查权限状态
    this.checkPermission()
  },

  async checkPermission() {
    // 需求 4.2, 4.4: 检查权限状态
    const result = await locationUtil.checkLocationPermission()
    this.setData({
      hasLocationPermission: result.hasPermission
    })
    
    if (result.hasPermission) {
      // 需求 4.2: 权限已授予，初始化位置功能
      this.initLocation()
    }
  },

  async initLocation() {
    // 需求 4.2: 权限已授予，获取初始位置
    try {
      const location = await locationUtil.getCurrentLocation()
      this.setData({ currentLocation: location })
    } catch (err) {
      console.error('获取位置失败:', err)
    }
  },

  async startWalking() {
    // 需求 4.4: 检查权限
    if (!this.data.hasLocationPermission) {
      permissionManager.showFeatureUnavailableHint(
        permissionManager.LOCATION_REQUIRED_FEATURES.NAVIGATION,
        () => {
          permissionManager.navigateToPermissionGuide('/pages/navigation/navigation')
        }
      )
      return
    }
    
    // 需求 4.2: 权限已授予，开始散步时启动位置追踪
    const success = await locationUtil.startLocationTracking(
      (location) => {
        this.setData({ 
          currentLocation: location,
          isTracking: true
        })
        // 发送到后端
        this.updateBackendLocation(location)
      },
      (error) => {
        console.error('位置追踪错误:', error)
      }
    )
    
    if (!success) {
      wx.showToast({
        title: '无法启动位置追踪',
        icon: 'none'
      })
    }
  },

  endWalking() {
    // 需求 4.5: 结束散步时停止位置追踪
    locationUtil.stopLocationTracking()
    this.setData({ isTracking: false })
  },

  updateBackendLocation(location) {
    // 发送位置更新到后端
    // const api = require('./api')
    // api.updateSessionLocation(this.data.sessionId, location)
  },

  onUnload() {
    // 需求 4.5: 页面卸载时确保停止追踪
    if (locationUtil.isLocationTracking()) {
      locationUtil.stopLocationTracking()
    }
  }
})

module.exports = {
  exampleRequestPermission,
  exampleCheckPermission,
  exampleGetCurrentLocation,
  exampleStartTracking,
  exampleStopTracking,
  exampleCheckTrackingStatus,
  exampleCalculateDistance,
  exampleUsePermissionManager
}
